import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import "./components/"
import "./js/utils.js" as Utils

Rectangle {
    id: selecaoProduto
    objectName: "selecaoProduto"
    height: parent.height
    width: parent.width

    property int id_depoperacao
    property var opcoes

    // Cria todos os botões dinamicamente com os dados do BD
    function carregarDados() {
        opcoes = {};

        carregarOpcoes(btnTodos.text);
        // Faz o loop em todas as opções de filtro para criar seus botões correspondentes
        var alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
        for (var i = 0; i < alfabeto.length; i++) {
            carregarOpcoes(alfabeto[i]);
        }
    }

    // Seleciona o botao "Todos" e ajusta algumas propriedades
    function iniciarSelecaoProdutos(id_depoperacao) {
        selecaoProduto.color = (appSkin.backgroundColor=="")?header.color:appSkin.backgroundColor;
        header.goBackText = "«  Selecionar Etapa";
        selecaoProduto.id_depoperacao = id_depoperacao;
        btnTodos.checked = true;
        selecionarFiltro(btnTodos);
    }

    // Método utilizado para criar os botões dos produtos
    // referentes ao filtro passado por parâmetro
    function carregarOpcoes(filtro) {
        var totalPaginas = getTotalPaginas(filtro);

        if (totalPaginas > 0) {
            var color = appSkin.paginatorButtonColor==""?header.color:appSkin.paginatorButtonColor;
            var pressedColor = appSkin.paginatorButtonPressedColor==""?header.color:appSkin.paginatorButtonPressedColor;

            var botoesPaginador = Utils.criarBotoesPaginador(paginador, totalPaginas, selecaoPagina, selecionarPagina, color, pressedColor, appSkin.paginatorButtonTextColor);

            for (var i = 0; i < botoesPaginador.length; i++) {
                var botaoPaginador = botoesPaginador[i];
                var numeroPagina = ~~botaoPaginador.text;
                var produtos = coletor_pcp.get_produtos(filtro, numeroPagina);

                var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;
                var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;

                var botoesProdutos = Utils.criarBotoesProdutos(listaProdutos, produtos, selecionarProduto, color, pressedColor, appSkin.buttonTextColor);
                botaoPaginador.data = botoesProdutos;
            }
            opcoes[filtro] = botoesPaginador;
        }
    }

    // Ação dos botões de filtro
    function selecionarFiltro(button) {
        Utils.omitirOpcoes(listaProdutos);
        Utils.omitirOpcoes(paginador);

        var botoesPaginador = opcoes[button.text];
        for (var i = 0; i < botoesPaginador.length; i++) {
            if (botoesPaginador[i].text === "1") {
                botoesPaginador[i].checked = true;

                var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;
                var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;

                Utils.mostrarOpcoes(botoesPaginador[i].data, color, pressedColor, appSkin.buttonTextColor);
            }
        }

        // Só mostra os botões do paginador se existir mais de uma página
        if (botoesPaginador.length > 1) {
            var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;
            var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;

            Utils.mostrarOpcoes(botoesPaginador, color, pressedColor, appSkin.paginatorButtonTextColor);
        }
    }

    //Ação dos Botões de seleção dos Produtos
    function selecionarProduto(button, data) {
        // Esse teste evita que o clique duplo realize duas ações
        if (Stack.status == Stack.Active) {
            var pesagem = stackView.push({item: app.pesagem, immediate: true, destroyOnPop: false});
            pesagem.iniciarPesagem(id_depoperacao, data.id_depprod, data.produto, data.codprod, selecaoProduto.color);
        }
    }

    //Ação dos Botões do paginador
    function selecionarPagina(button) {
        // Esconde os produtos que estão sendo exibidos
        Utils.omitirOpcoes(listaProdutos);

        // Exibe os produtos da página selecionada
        var color = appSkin.buttonColor==""?header.color:appSkin.buttonColor;
        var pressedColor = appSkin.buttonPressedColor==""?header.color:appSkin.buttonPressedColor;

        Utils.mostrarOpcoes(button.data, color, pressedColor, appSkin.buttonTextColor);
    }

    // Retorna o total de páginas para o filtro passado por parâmetro
    function getTotalPaginas(filtro) {
        return coletor_pcp.get_total_paginas_produtos(filtro);
    }

    property Component filterButtonStyle: ButtonStyle {
        label: Text {
            antialiasing: true
            renderType: Text.NativeRendering
            width: control.width
            height: control.height
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
            text: control.text
            font.bold: true
            font.pixelSize: control.fontSize
            color: {
                if (control.enabled)
                    return control.checked ? "white" : appSkin.paginatorButtonTextColor;
                else
                    return "#C0C0C0";
            }
        }
        background: Rectangle {
            antialiasing: true
            implicitWidth: 100
            implicitHeight: 25
            border.width: control.activeFocus ? 2 : 1
            border.color: control.checked ? qsTr("#666") : "#888"
            radius: 8
            color: {
                if (control.enabled) {
                    var color = appSkin.paginatorButtonColor==""?header.color:appSkin.paginatorButtonColor;
                    var pressedColor = appSkin.paginatorButtonPressedColor==""?header.color:appSkin.paginatorButtonPressedColor;

                    return control.checked ? pressedColor : color;
                } else {
                    return "#EBECE4";
                }
            }
        }
    }

    ExclusiveGroup { id: selecaoFiltro }
    ExclusiveGroup { id: selecaoPagina }

    property Button btnTodos: Button {
        id: btnTodos
        height: parent.height * 0.90
        width: parent.width * 0.5
        checkable: true
        checked: true
        exclusiveGroup: selecaoFiltro
        text: qsTr("Todos")
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.horizontalCenterOffset: (parent.width * 0.05) * -1
        anchors.top: parent.top
        anchors.topMargin: 0
        style: filterButtonStyle
        visible: true

        property int fontSize: 20

        onCheckedChanged: {
            if (checked) {
                selecionarFiltro(this);
            }
        }
    }

    GridView {
        id: listaFiltro
        width: parent.width * 0.20
        height: parent.height - (parent.height * 0.03)
        anchors.top: parent.top
        anchors.topMargin: parent.height * 0.03
        anchors.left: parent.left
        anchors.leftMargin: parent.width * 0.01
        cellHeight: height * 0.1
        cellWidth: width * 0.3
        interactive: false;

        header: Item {
            width: parent.width
            height: parent.parent.height * 0.1
            children: [btnTodos]
        }

        model: ListModel {
            ListElement { name: "A" }
            ListElement { name: "B" }
            ListElement { name: "C" }
            ListElement { name: "D" }
            ListElement { name: "E" }
            ListElement { name: "F" }
            ListElement { name: "G" }
            ListElement { name: "H" }
            ListElement { name: "I" }
            ListElement { name: "J" }
            ListElement { name: "K" }
            ListElement { name: "L" }
            ListElement { name: "M" }
            ListElement { name: "N" }
            ListElement { name: "O" }
            ListElement { name: "P" }
            ListElement { name: "Q" }
            ListElement { name: "R" }
            ListElement { name: "S" }
            ListElement { name: "T" }
            ListElement { name: "U" }
            ListElement { name: "V" }
            ListElement { name: "W" }
            ListElement { name: "X" }
            ListElement { name: "Y" }
            ListElement { name: "Z" }
        }

        delegate: Item {
            Button {
                text: qsTr(name)
                anchors.top: parent.top
                anchors.topMargin: 0
                anchors.left: parent.left
                anchors.leftMargin: 0
                width: listaFiltro.cellWidth * 0.9
                height: listaFiltro.cellHeight * 0.9
                checkable: true
                exclusiveGroup: selecaoFiltro
                style: filterButtonStyle
                enabled: {
                    return (getTotalPaginas(text) > 0);
                }

                property int fontSize: 30

                onCheckedChanged: {
                    if (checked) {
                        selecionarFiltro(this);
                    }
                }
            }
        }
    }

    Rectangle {
        width: 3
        color: (appSkin.verticalSeparatorColor=="")?header.color:appSkin.verticalSeparatorColor;
        anchors.left: listaFiltro.right
        anchors.leftMargin: -(parent.width * 0.014)
        anchors.top: parent.top
        anchors.topMargin: 0
        anchors.bottom: parent.bottom
    }

    Grid {
        id: listaProdutos
        anchors.top: parent.top
        anchors.topMargin: parent.height * 0.02
        anchors.bottom: paginador.top
        anchors.left: listaFiltro.right
        anchors.right: parent.right
        columns: 4
        rows: 6
        spacing: parent.width * 0.01
    }

    Paginator {
        id: paginador
    }
}
